/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package moteur.partie;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import moteur.Transport;
import moteur.carte.Road;
import moteur.paquet.PaquetCartesVoyages;
import moteur.paquet.PaquetPionTransport;
import moteur.paquet.PaquetVideException;
import moteur.paquet.PionsEnMain;

/**
 *  A jeter!!!
 * @author nlupins
 */
public class JoeurConsole extends Joeur {

    /**
     *
     * @param nom
     * @param p
     */
    public JoeurConsole(String nom, Partie p) {
        super(nom);
    }

    /**
     *
     * @param choix
     */
    @Override
    public void choisiPion(PionsEnMain choix) {
        System.out.println("A" + nom + "de choisir un pion:");
        System.out.println(choix.toString());
        System.out.println("''p'' pour passer, ''piocher'' pour piocher.");

        boolean OK = false;
        BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in));
        String reponse = null;
        Transport tmp;
        while (!OK) {
            System.out.println(">>> ");
            try {
                reponse = clavier.readLine();
            } catch (Exception e) {
                e.printStackTrace();
            }

            if (reponse.equals("p")) {
                OK = true;
                passe();
            } else {
                if (reponse.equals("piocher")) {
                    try {
                        pions.piocher(PaquetPionTransport.getInstance());
                    } catch (Exception e) {
                    }
                } else {
                    try {
                        tmp = Transport.valueOf(reponse);
                        if (tmp == Transport.KAYAK) throw new IllegalArgumentException();
                        choix.transfer(tmp, pions);
                        OK = true;
                    } catch (IllegalArgumentException e) {
                        System.err.println("Mauvaise frappe ou mauvais type (pas de kayak dans les pions).");
                    } catch (Exception e) {
                        System.err.println("Soit il n'y a plus de pion de ce type, soit le codeur peut se faire Hara Kiri.");
                    }
                }
            }
        }
        updatePartie();
    }

    /**
     *
     */
    @Override
    public void defausse() {
        boolean OK = false;
        while (!OK) {
            OK = true;
        }
            try {
                if (this.cartes.total() > 4) {
                    OK = false;
                    System.out.println("A" + nom + "de se défausser d'une carte:");
                    System.out.println(cartes.toString());
                    BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in));
                    String reponse = null;
                    Transport tmp;
                    System.out.println(">>> ");
                    try {
                        reponse = clavier.readLine();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    if (reponse.equals(p)) {
                        OK = true;
                        passe();
                    } else {
                        try {
                            tmp = Transport.valueOf(reponse);
                            cartes.transfer(tmp, PaquetCartesVoyages.getInstance());
                        } catch (IllegalArgumentException e) {
                            System.err.println("Faut recopier le nom correctement!");
                        } catch (Exception e) {
                            System.err.println("Soit il n'y a plus de carte de ce type, soit le codeur peut se faire Hara Kiri.");
                        }
                    }
                } else {
                    try {
                        if (this.pions.total() > 1) {
                            OK = false;
                            System.out.println("A" + nom + "de se défausser d'un pion:");
                            System.out.println(pions.toString());
                            BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in));
                            String reponse = null;
                            Transport tmp;
                            System.out.println(">>> ");
                            try {
                                reponse = clavier.readLine();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            if (reponse.equals("p")) {
                                OK = true;
                                passe();
                            } else {
                                try {
                                    tmp = Transport.valueOf(reponse);
                                    pions.transfer(tmp, PaquetPionTransport.getInstance());
                                } catch (IllegalArgumentException e) {
                                    System.err.println("Faut recopier le nom correctement!");
                                } catch (Exception e) {
                                    System.err.println("Soit il n'y a plus de carte de ce type, soit le codeur peut se faire Hara Kiri.");
                                }
                            }
                        }
                    } catch (PaquetVideException ex) {
                        Logger.getLogger(JoeurConsole.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            } catch (PaquetVideException ex) {
                Logger.getLogger(JoeurConsole.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    /**
     *
     */
    @Override
    public void deplacer() {
        System.out.println("A" + nom + "de se déplacer:");
        Vector<Road> v = localisation.getRoads();
        for(Road r: v){
        System.out.println();
        }

    }

    /**
     *
     */
    @Override
    public void placePion() {
        System.out.println("A" + nom + "de placer un pion:");
    }
}
